{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/home/think/anaconda3/lib/python3.7/site-packages/numpy/__init__.py:140: UserWarning: mkl-service package failed to import, therefore Intel(R) MKL initialization ensuring its correct out-of-the box operation under condition when Gnu OpenMP had already been loaded by Python process is not assured. Please install mkl-service package, see http://github.com/IntelPython/mkl-service\n",
      "  from . import _distributor_init\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "'1.7.1'"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import torch\n",
    "torch.__version__"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import re\n",
    "\n",
    "import cv2\n",
    "import numpy as np\n",
    "# import torch\n",
    "from skimage import io\n",
    "from torch import nn\n",
    "from torchvision import models\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "import os\n",
    "import warnings\n",
    "\n",
    "import mmcv\n",
    "import torch\n",
    "from mmcv import Config, DictAction\n",
    "from mmcv.cnn import fuse_conv_bn\n",
    "from mmcv.parallel import MMDataParallel, MMDistributedDataParallel\n",
    "from mmcv.runner import (get_dist_info, init_dist, load_checkpoint,\n",
    "                         wrap_fp16_model)\n",
    "\n",
    "from mmdet.apis import multi_gpu_test, single_gpu_test\n",
    "from mmdet.datasets import (build_dataloader, build_dataset,\n",
    "                            replace_ImageToTensor)\n",
    "from mmdet.models import build_detector"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "cfg = Config.fromfile('work_dirs/faster_rcnn_hrnetv2p_w32_48e_coco_data1000_0228/faster_rcnn_hrnetv2p_w32_48e_coco_data1000_0228.py')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "2021-03-23 17:35:49,417 - mmdet - INFO - load model from: open-mmlab://msra/hrnetv2_w32\n",
      "2021-03-23 17:35:49,986 - mmdet - WARNING - The model and loaded state dict do not match exactly\n",
      "\n",
      "unexpected key in source state_dict: incre_modules.0.0.conv1.weight, incre_modules.0.0.bn1.weight, incre_modules.0.0.bn1.bias, incre_modules.0.0.bn1.running_mean, incre_modules.0.0.bn1.running_var, incre_modules.0.0.bn1.num_batches_tracked, incre_modules.0.0.conv2.weight, incre_modules.0.0.bn2.weight, incre_modules.0.0.bn2.bias, incre_modules.0.0.bn2.running_mean, incre_modules.0.0.bn2.running_var, incre_modules.0.0.bn2.num_batches_tracked, incre_modules.0.0.conv3.weight, incre_modules.0.0.bn3.weight, incre_modules.0.0.bn3.bias, incre_modules.0.0.bn3.running_mean, incre_modules.0.0.bn3.running_var, incre_modules.0.0.bn3.num_batches_tracked, incre_modules.0.0.downsample.0.weight, incre_modules.0.0.downsample.1.weight, incre_modules.0.0.downsample.1.bias, incre_modules.0.0.downsample.1.running_mean, incre_modules.0.0.downsample.1.running_var, incre_modules.0.0.downsample.1.num_batches_tracked, incre_modules.1.0.conv1.weight, incre_modules.1.0.bn1.weight, incre_modules.1.0.bn1.bias, incre_modules.1.0.bn1.running_mean, incre_modules.1.0.bn1.running_var, incre_modules.1.0.bn1.num_batches_tracked, incre_modules.1.0.conv2.weight, incre_modules.1.0.bn2.weight, incre_modules.1.0.bn2.bias, incre_modules.1.0.bn2.running_mean, incre_modules.1.0.bn2.running_var, incre_modules.1.0.bn2.num_batches_tracked, incre_modules.1.0.conv3.weight, incre_modules.1.0.bn3.weight, incre_modules.1.0.bn3.bias, incre_modules.1.0.bn3.running_mean, incre_modules.1.0.bn3.running_var, incre_modules.1.0.bn3.num_batches_tracked, incre_modules.1.0.downsample.0.weight, incre_modules.1.0.downsample.1.weight, incre_modules.1.0.downsample.1.bias, incre_modules.1.0.downsample.1.running_mean, incre_modules.1.0.downsample.1.running_var, incre_modules.1.0.downsample.1.num_batches_tracked, incre_modules.2.0.conv1.weight, incre_modules.2.0.bn1.weight, incre_modules.2.0.bn1.bias, incre_modules.2.0.bn1.running_mean, incre_modules.2.0.bn1.running_var, incre_modules.2.0.bn1.num_batches_tracked, incre_modules.2.0.conv2.weight, incre_modules.2.0.bn2.weight, incre_modules.2.0.bn2.bias, incre_modules.2.0.bn2.running_mean, incre_modules.2.0.bn2.running_var, incre_modules.2.0.bn2.num_batches_tracked, incre_modules.2.0.conv3.weight, incre_modules.2.0.bn3.weight, incre_modules.2.0.bn3.bias, incre_modules.2.0.bn3.running_mean, incre_modules.2.0.bn3.running_var, incre_modules.2.0.bn3.num_batches_tracked, incre_modules.2.0.downsample.0.weight, incre_modules.2.0.downsample.1.weight, incre_modules.2.0.downsample.1.bias, incre_modules.2.0.downsample.1.running_mean, incre_modules.2.0.downsample.1.running_var, incre_modules.2.0.downsample.1.num_batches_tracked, incre_modules.3.0.conv1.weight, incre_modules.3.0.bn1.weight, incre_modules.3.0.bn1.bias, incre_modules.3.0.bn1.running_mean, incre_modules.3.0.bn1.running_var, incre_modules.3.0.bn1.num_batches_tracked, incre_modules.3.0.conv2.weight, incre_modules.3.0.bn2.weight, incre_modules.3.0.bn2.bias, incre_modules.3.0.bn2.running_mean, incre_modules.3.0.bn2.running_var, incre_modules.3.0.bn2.num_batches_tracked, incre_modules.3.0.conv3.weight, incre_modules.3.0.bn3.weight, incre_modules.3.0.bn3.bias, incre_modules.3.0.bn3.running_mean, incre_modules.3.0.bn3.running_var, incre_modules.3.0.bn3.num_batches_tracked, incre_modules.3.0.downsample.0.weight, incre_modules.3.0.downsample.1.weight, incre_modules.3.0.downsample.1.bias, incre_modules.3.0.downsample.1.running_mean, incre_modules.3.0.downsample.1.running_var, incre_modules.3.0.downsample.1.num_batches_tracked, downsamp_modules.0.0.weight, downsamp_modules.0.0.bias, downsamp_modules.0.1.weight, downsamp_modules.0.1.bias, downsamp_modules.0.1.running_mean, downsamp_modules.0.1.running_var, downsamp_modules.0.1.num_batches_tracked, downsamp_modules.1.0.weight, downsamp_modules.1.0.bias, downsamp_modules.1.1.weight, downsamp_modules.1.1.bias, downsamp_modules.1.1.running_mean, downsamp_modules.1.1.running_var, downsamp_modules.1.1.num_batches_tracked, downsamp_modules.2.0.weight, downsamp_modules.2.0.bias, downsamp_modules.2.1.weight, downsamp_modules.2.1.bias, downsamp_modules.2.1.running_mean, downsamp_modules.2.1.running_var, downsamp_modules.2.1.num_batches_tracked, final_layer.0.weight, final_layer.0.bias, final_layer.1.weight, final_layer.1.bias, final_layer.1.running_mean, final_layer.1.running_var, final_layer.1.num_batches_tracked, classifier.weight, classifier.bias\n",
      "\n"
     ]
    }
   ],
   "source": [
    "model = build_detector(cfg.model, test_cfg=cfg.get('test_cfg'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "checkpoint = load_checkpoint(model, 'work_dirs/faster_rcnn_hrnetv2p_w32_48e_coco_data1000_0228/epoch_48.pth', map_location='cpu')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "model.CLASSES = checkpoint['meta']['CLASSES']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "FasterRCNN(\n",
       "  (backbone): HRNet(\n",
       "    (conv1): Conv2d(3, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "    (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "    (relu): ReLU(inplace=True)\n",
       "    (layer1): Sequential(\n",
       "      (0): Bottleneck(\n",
       "        (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "        (downsample): Sequential(\n",
       "          (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        )\n",
       "      )\n",
       "      (1): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (2): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "      (3): Bottleneck(\n",
       "        (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "        (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (relu): ReLU(inplace=True)\n",
       "      )\n",
       "    )\n",
       "    (transition1): ModuleList(\n",
       "      (0): Sequential(\n",
       "        (0): Conv2d(256, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "        (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "        (2): ReLU(inplace=True)\n",
       "      )\n",
       "      (1): Sequential(\n",
       "        (0): Sequential(\n",
       "          (0): Conv2d(256, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (2): ReLU(inplace=True)\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "    (stage2): Sequential(\n",
       "      (0): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "    )\n",
       "    (transition2): ModuleList(\n",
       "      (0): None\n",
       "      (1): None\n",
       "      (2): Sequential(\n",
       "        (0): Sequential(\n",
       "          (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (2): ReLU(inplace=True)\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "    (stage3): Sequential(\n",
       "      (0): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "      (1): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "      (2): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "      (3): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "    )\n",
       "    (transition3): ModuleList(\n",
       "      (0): None\n",
       "      (1): None\n",
       "      (2): None\n",
       "      (3): Sequential(\n",
       "        (0): Sequential(\n",
       "          (0): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "          (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "          (2): ReLU(inplace=True)\n",
       "        )\n",
       "      )\n",
       "    )\n",
       "    (stage4): Sequential(\n",
       "      (0): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (3): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=8.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (3): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (2): Sequential(\n",
       "                (0): Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (3): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "      (1): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (3): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=8.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (3): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (2): Sequential(\n",
       "                (0): Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (3): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "      (2): HRModule(\n",
       "        (branches): ModuleList(\n",
       "          (0): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (1): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (2): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "          (3): Sequential(\n",
       "            (0): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (1): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (2): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "            (3): BasicBlock(\n",
       "              (conv1): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
       "              (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (relu): ReLU(inplace=True)\n",
       "            )\n",
       "          )\n",
       "        )\n",
       "        (fuse_layers): ModuleList(\n",
       "          (0): ModuleList(\n",
       "            (0): None\n",
       "            (1): Sequential(\n",
       "              (0): Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=8.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (1): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): None\n",
       "            (2): Sequential(\n",
       "              (0): Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=4.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (2): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): None\n",
       "            (3): Sequential(\n",
       "              (0): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
       "              (1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              (2): Upsample(scale_factor=2.0, mode=nearest)\n",
       "            )\n",
       "          )\n",
       "          (3): ModuleList(\n",
       "            (0): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(32, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (2): Sequential(\n",
       "                (0): Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (1): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "                (2): ReLU()\n",
       "              )\n",
       "              (1): Sequential(\n",
       "                (0): Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (2): Sequential(\n",
       "              (0): Sequential(\n",
       "                (0): Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
       "                (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)\n",
       "              )\n",
       "            )\n",
       "            (3): None\n",
       "          )\n",
       "        )\n",
       "        (relu): ReLU()\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (neck): HRFPN(\n",
       "    (reduction_conv): ConvModule(\n",
       "      (conv): Conv2d(480, 256, kernel_size=(1, 1), stride=(1, 1))\n",
       "    )\n",
       "    (fpn_convs): ModuleList(\n",
       "      (0): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (1): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (2): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (3): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "      (4): ConvModule(\n",
       "        (conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "      )\n",
       "    )\n",
       "  )\n",
       "  (rpn_head): RPNHead(\n",
       "    (loss_cls): CrossEntropyLoss()\n",
       "    (loss_bbox): L1Loss()\n",
       "    (rpn_conv): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
       "    (rpn_cls): Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
       "    (rpn_reg): Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n",
       "  )\n",
       "  (roi_head): StandardRoIHead(\n",
       "    (bbox_roi_extractor): SingleRoIExtractor(\n",
       "      (roi_layers): ModuleList(\n",
       "        (0): RoIAlign(output_size=(7, 7), spatial_scale=0.25, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (1): RoIAlign(output_size=(7, 7), spatial_scale=0.125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (2): RoIAlign(output_size=(7, 7), spatial_scale=0.0625, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "        (3): RoIAlign(output_size=(7, 7), spatial_scale=0.03125, sampling_ratio=0, pool_mode=avg, aligned=True, use_torchvision=False)\n",
       "      )\n",
       "    )\n",
       "    (bbox_head): Shared2FCBBoxHead(\n",
       "      (loss_cls): CrossEntropyLoss()\n",
       "      (loss_bbox): L1Loss()\n",
       "      (fc_cls): Linear(in_features=1024, out_features=11, bias=True)\n",
       "      (fc_reg): Linear(in_features=1024, out_features=40, bias=True)\n",
       "      (shared_convs): ModuleList()\n",
       "      (shared_fcs): ModuleList(\n",
       "        (0): Linear(in_features=12544, out_features=1024, bias=True)\n",
       "        (1): Linear(in_features=1024, out_features=1024, bias=True)\n",
       "      )\n",
       "      (cls_convs): ModuleList()\n",
       "      (cls_fcs): ModuleList()\n",
       "      (reg_convs): ModuleList()\n",
       "      (reg_fcs): ModuleList()\n",
       "      (relu): ReLU(inplace=True)\n",
       "    )\n",
       "  )\n",
       ")"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "model.eval()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "loading annotations into memory...\n",
      "Done (t=0.00s)\n",
      "creating index...\n",
      "index created!\n"
     ]
    }
   ],
   "source": [
    "dataset = build_dataset(cfg.data.test)\n",
    "data_loader = build_dataloader(\n",
    "    dataset,\n",
    "    samples_per_gpu=1,\n",
    "    workers_per_gpu=cfg.data.workers_per_gpu,\n",
    "    dist=False,\n",
    "    shuffle=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [],
   "source": [
    "data = []\n",
    "for i, t in enumerate(data_loader):\n",
    "    tmp = {}\n",
    "    tmp['img'] = t['img']\n",
    "    tmp['img_metas'] = t['img_metas'][0].data[0]\n",
    "    data.append(tmp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 120,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'img': [tensor([[[[ 1.3070,  1.3242,  1.3413,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.3070,  1.3242,  1.3584,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.3242,  1.3413,  1.3584,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.3644, -1.3987, -1.4329,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.3815, -1.3987, -1.4500,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.3815, -1.3987, -1.4500,  ...,  0.0000,  0.0000,  0.0000]],\n",
       "  \n",
       "           [[ 1.4657,  1.4832,  1.5007,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.4657,  1.4832,  1.5182,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.4832,  1.5007,  1.5182,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.1078, -1.1429, -1.1779,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1254, -1.1429, -1.1954,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1254, -1.1429, -1.1954,  ...,  0.0000,  0.0000,  0.0000]],\n",
       "  \n",
       "           [[ 1.6814,  1.6988,  1.7163,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.6814,  1.6988,  1.7337,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [ 1.6988,  1.7163,  1.7337,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            ...,\n",
       "            [-1.1770, -1.2119, -1.2467,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1944, -1.2119, -1.2641,  ...,  0.0000,  0.0000,  0.0000],\n",
       "            [-1.1944, -1.2119, -1.2641,  ...,  0.0000,  0.0000,  0.0000]]]])],\n",
       " 'img_metas': [{'filename': 'data/coco/data0228_test/山东1494985475245-xiaochicun.jpg',\n",
       "   'ori_filename': '山东1494985475245-xiaochicun.jpg',\n",
       "   'ori_shape': (403, 404, 3),\n",
       "   'img_shape': (800, 802, 3),\n",
       "   'pad_shape': (800, 832, 3),\n",
       "   'scale_factor': array([1.9851485, 1.9851117, 1.9851485, 1.9851117], dtype=float32),\n",
       "   'flip': False,\n",
       "   'flip_direction': None,\n",
       "   'img_norm_cfg': {'mean': array([123.675, 116.28 , 103.53 ], dtype=float32),\n",
       "    'std': array([58.395, 57.12 , 57.375], dtype=float32),\n",
       "    'to_rgb': True}}]}"
      ]
     },
     "execution_count": 120,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "################################################\n",
    "data[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "\n",
    "# cfg.nms_pre = 1000\n",
    "# cfg.min_bbox_size = 1\n",
    "# cfg.nms_thr = 10\n",
    "# cfg.nms_post = 1000\n",
    "test_cfg = model.rpn_head.test_cfg\n",
    "\n",
    "# img_metas = data['img_metas']\n",
    "\n",
    "\n",
    "def get_bboxes_tmp(rpn_outs, img_metas, test_cfg):\n",
    "    \n",
    "    with_nms = False\n",
    "    rescale = False\n",
    "    cls_scores = rpn_outs[0]\n",
    "    bbox_preds = rpn_outs[1]\n",
    "\n",
    "    num_levels = len(cls_scores)\n",
    "\n",
    "    device = cls_scores[0].device\n",
    "    featmap_sizes = [cls_scores[i].shape[-2:] for i in range(num_levels)]\n",
    "    mlvl_anchors = model.rpn_head.anchor_generator.grid_anchors(\n",
    "        featmap_sizes, device=device)\n",
    "\n",
    "    result_list = []\n",
    "    for img_id in range(len(img_metas)):\n",
    "        cls_score_list = [\n",
    "            cls_scores[i][img_id] for i in range(num_levels)\n",
    "        ]\n",
    "        bbox_pred_list = [\n",
    "            bbox_preds[i][img_id] for i in range(num_levels)\n",
    "        ]\n",
    "        img_shape = img_metas[img_id]['img_shape']\n",
    "        scale_factor = img_metas[img_id]['scale_factor']\n",
    "\n",
    "        if with_nms:\n",
    "            # some heads don't support with_nms argument\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        else:\n",
    "            proposals = model.rpn_head._get_bboxes_single(cls_score_list,\n",
    "                                                bbox_pred_list,\n",
    "                                                mlvl_anchors, img_shape,\n",
    "                                                scale_factor, test_cfg, rescale)\n",
    "        result_list.append(proposals)\n",
    "    \n",
    "    return result_list"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "backbone.conv1 , Conv2d(3, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv1 , Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.0.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.0.downsample.0 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.1.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.2.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.3.conv1 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.layer1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.layer1.3.conv3 , Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.transition1.0.0 , Conv2d(256, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.transition1.1.0.0 , Conv2d(256, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage2.0.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage2.0.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.transition2.2.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.0.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.1.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.2.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage3.3.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.transition3.3.0.0 , Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.0.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.0.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.1.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.1.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.2.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.2.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.3.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.branches.3.3.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.0.3.0 , Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.1.3.0 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.2.3.0 , Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.0.1.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.0.2.0 , Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.1.0.0 , Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.1.1.0 , Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.0.fuse_layers.3.2.0.0 , Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.0.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.0.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.1.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.1.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.2.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.2.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.3.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.branches.3.3.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.0.3.0 , Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.1.3.0 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.2.3.0 , Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.0.1.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.0.2.0 , Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.1.0.0 , Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.1.1.0 , Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.1.fuse_layers.3.2.0.0 , Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.0.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.0.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.1.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.1.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.2.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.2.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.3.conv1 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.0.3.conv2 , Conv2d(32, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.0.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.0.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.1.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.1.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.2.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.2.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.3.conv1 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.1.3.conv2 , Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.0.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.0.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.1.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.1.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.2.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.2.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.3.conv1 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.2.3.conv2 , Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.0.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.0.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.1.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.1.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.2.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.2.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.3.conv1 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.branches.3.3.conv2 , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.0.1.0 , Conv2d(64, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.0.2.0 , Conv2d(128, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.0.3.0 , Conv2d(256, 32, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.1.0.0.0 , Conv2d(32, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.1.2.0 , Conv2d(128, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.1.3.0 , Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.2.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.2.0.1.0 , Conv2d(32, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.2.1.0.0 , Conv2d(64, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.2.3.0 , Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.0.0.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.0.1.0 , Conv2d(32, 32, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.0.2.0 , Conv2d(32, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.1.0.0 , Conv2d(64, 64, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.1.1.0 , Conv2d(64, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "backbone.stage4.2.fuse_layers.3.2.0.0 , Conv2d(128, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False)\n",
      "neck.reduction_conv.conv , Conv2d(480, 256, kernel_size=(1, 1), stride=(1, 1))\n",
      "neck.fpn_convs.0.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.1.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.2.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.3.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "neck.fpn_convs.4.conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_conv , Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1))\n",
      "rpn_head.rpn_cls , Conv2d(256, 3, kernel_size=(1, 1), stride=(1, 1))\n",
      "rpn_head.rpn_reg , Conv2d(256, 12, kernel_size=(1, 1), stride=(1, 1))\n"
     ]
    }
   ],
   "source": [
    "###########################################################\n",
    "for name, m in model.named_modules():\n",
    "        if isinstance(m, nn.Conv2d):\n",
    "            print(name,',',m)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "class GradCAM(object):\n",
    "    \"\"\"\n",
    "    1: 网络不更新梯度,输入需要梯度更新\n",
    "    2: 使用目标类别的得分做反向传播\n",
    "    \"\"\"\n",
    "\n",
    "    def __init__(self, net, layer_name):\n",
    "        self.net = net\n",
    "        self.layer_name = layer_name\n",
    "        self.feature = None\n",
    "        self.gradient = None\n",
    "        self.net.eval()\n",
    "        self.handlers = []\n",
    "        self._register_hook()\n",
    "\n",
    "    def _get_features_hook(self, module, input, output):\n",
    "        self.feature = output\n",
    "        # print(\"feature shape:{}\".format(output.size()))\n",
    "\n",
    "    def _get_grads_hook(self, module, input_grad, output_grad):\n",
    "        \"\"\"\n",
    "\n",
    "        :param input_grad: tuple, input_grad[0]: None\n",
    "                                   input_grad[1]: weight\n",
    "                                   input_grad[2]: bias\n",
    "        :param output_grad:tuple,长度为1\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.gradient = output_grad[0]\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "    def _register_hook(self):\n",
    "        for (name, module) in self.net.named_modules():\n",
    "            if name == self.layer_name:\n",
    "                self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "                self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "#         module = self.net.rpn.head.bbox_pred\n",
    "#         self.handlers.append(module.register_forward_hook(self._get_features_hook))\n",
    "#         self.handlers.append(module.register_backward_hook(self._get_grads_hook))\n",
    "            \n",
    "                # print(self.handlers)\n",
    "\n",
    "    def remove_handlers(self):\n",
    "        for handle in self.handlers:\n",
    "            handle.remove()\n",
    "\n",
    "    def __call__(self, inputs, index=0):\n",
    "        \"\"\"\n",
    "\n",
    "        :param inputs: {\"image\": [C,H,W], \"height\": height, \"width\": width}\n",
    "        :param index: 第几个边框\n",
    "        :return:\n",
    "        \"\"\"\n",
    "        self.net.zero_grad()\n",
    "        # output = self.net([inputs])\n",
    "        x = self.net.extract_feat(inputs['img'][0])\n",
    "        rpn_outs = self.net.rpn_head(x)\n",
    "        result_list = get_bboxes_tmp(rpn_outs,inputs['img_metas'],self.net.rpn_head.test_cfg)\n",
    "        res= self.net.roi_head.simple_test_bboxes(\n",
    "            x, inputs['img_metas'], result_list, self.net.roi_head.test_cfg, rescale=True)\n",
    "        # print(output)\n",
    "        score = res[0][0][index][4]\n",
    "        # proposal_idx = output[0]['labels'][index]  # box来自第几个proposal\n",
    "        print(score)\n",
    "        score.backward()\n",
    "        # print('gradient:', self.gradient)\n",
    "\n",
    "        # gradient = self.gradient[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        gradient = self.gradient.cpu().data.numpy().squeeze()\n",
    "        \n",
    "        weight = np.mean(gradient, axis=(1, 2))  # [C]\n",
    "\n",
    "        # feature = self.feature[proposal_idx].cpu().data.numpy()  # [C,H,W]\n",
    "        feature = self.feature.cpu().data.numpy().squeeze()\n",
    "\n",
    "        cam = feature * weight[:, np.newaxis, np.newaxis]  # [C,H,W]\n",
    "        # print(cam.shape)\n",
    "        cam = np.sum(cam, axis=0)  # [H,W]\n",
    "        cam = np.maximum(cam, 0)  # ReLU\n",
    "\n",
    "        # 数值归一化\n",
    "        cam -= np.min(cam)\n",
    "        cam /= np.max(cam)\n",
    "        # resize to 224*224\n",
    "        # box = output[0]['instances'].pred_boxes.tensor[index].detach().numpy().astype(np.int32)\n",
    "        box = res[0][0][index][:-1].detach().numpy().astype(np.int32)\n",
    "        x1, y1, x2, y2 = box\n",
    "        \n",
    "        # cam = cv2.resize(cam, (x2 - x1, y2 - y1))\n",
    "        # cam = cv2.resize(cam, (y2 - y1, x2 - x1)).T\n",
    "        # print(cam.shape)\n",
    "\n",
    "        # class_id = output[0]['instances'].pred_classes[index].detach().numpy()\n",
    "        class_id = res[1][0][index].detach().numpy()\n",
    "        plt.imshow(cam)\n",
    "        return cam, box, class_id"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "grad_cam = GradCAM(model, 'backbone.stage4.2.fuse_layers.3.2.0.0')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "mask, box, class_id = grad_cam(data[30],0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": [
    "def norm_image(image):\n",
    "    \"\"\"\n",
    "    标准化图像\n",
    "    :param image: [H,W,C]\n",
    "    :return:\n",
    "    \"\"\"\n",
    "    image = image.copy()\n",
    "    image -= np.max(np.min(image), 0)\n",
    "    image /= np.max(image)\n",
    "    image *= 255.\n",
    "    return np.uint8(image)\n",
    "\n",
    "def gen_cam(image, mask):\n",
    "    \"\"\"\n",
    "    生成CAM图\n",
    "    :param image: [H,W,C],原始图像\n",
    "    :param mask: [H,W],范围0~1\n",
    "    :return: tuple(cam,heatmap)\n",
    "    \"\"\"\n",
    "    # mask转为heatmap\n",
    "    heatmap = cv2.applyColorMap(np.uint8(255 * mask), cv2.COLORMAP_JET)\n",
    "    heatmap = np.float32(heatmap) / 255\n",
    "    heatmap = heatmap[..., ::-1]  # gbr to rgb\n",
    "\n",
    "    # 合并heatmap到原始图像\n",
    "    cam = heatmap + np.float32(image)\n",
    "    return norm_image(cam), heatmap"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x7fdc781d8d10>"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "image_dict = {}\n",
    "im = data[30]['img'][0].squeeze(0).permute(1,2,0)\n",
    "mask = cv2.resize(mask, (im.shape[1], im.shape[0]))\n",
    "image_cam, image_dict['heatmap'] = gen_cam(im, mask)\n",
    "plt.imshow(image_cam)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
